function findAllPaths(edges, start, end) {
  // 构建邻接表
  const graph = {};
  edges.forEach(edge => {
    const [src, dest] = edge.split('-');
    if (!graph[src]) graph[src] = [];
    graph[src].push(dest);
    // 如果是无向图，需要添加以下两行
    // if (!graph[dest]) graph[dest] = [];
    // graph[dest].push(src);
  });

  const paths = []; // 存储所有路径
  const visited = new Set(); // 存储已访问的节点

  // DFS函数
  function dfs(currentNode, path) {
    if (currentNode === end) {
      // 找到一条路径，将其添加到paths数组中
      paths.push(path);
      return;
    }
    visited.add(currentNode); // 标记当前节点为已访问
    for (const neighbor of graph[currentNode] || []) {
      if (!visited.has(neighbor)) {
        // 递归地继续搜索
        dfs(neighbor, path.concat(neighbor));
      }
    }
    visited.delete(currentNode); // 回溯时，将当前节点标记为未访问
  }

  // 从起点开始搜索
  dfs(start, [start]);
  return paths;
}

// 使用示例
const arr = ['a-b', 'b-c', 'a-d', 'c-d', 'd-f'];
const start = 'a';
const end = 'f';
const allPaths = findAllPaths(arr, start, end);

console.log(allPaths);

// 检测循环依赖
// ip地址与整数的转换
// 基本计算器2
// lfu 缓存
// 字符串转换为整数
